﻿USE master
GO

IF EXISTS (SELECT * FROM sysdatabases WHERE name = 'ManagerEmployeesERP') DROP DATABASE ManagerEmployeesERP
GO

CREATE DATABASE ManagerEmployeesERP
GO

USE ManagerEmployeesERP
GO

-- Organizations Cơ quan tổ chức ------------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Organizations') DROP TABLE Organizations
GO
CREATE TABLE Organizations
(
	OrganID								VARCHAR(36) PRIMARY KEY,
    ParentID                            VARCHAR(36) NULL,
	Code        						VARCHAR(50) UNIQUE NULL,
	Name    							NVARCHAR(50) NULL,
    Address                             NVARCHAR(100) NULL,
    Phone                               VARCHAR(50) NULL,
    Telephone                           VARCHAR(50) NULL,
    Fax                                 VARCHAR(50) NULL,
	Descriptons							NTEXT NULL,
	OrganStatus							BIT NULL,
    CreatedBy                           INT NULL,
    CreatedDate                         DATETIME NULL DEFAULT GETDATE(),
    EditedBy                            INT NULL,
    EditedDate                          DATETIME NULL DEFAULT GETDATE()
)
GO



-- Employees --------------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Employees') DROP TABLE Employees
GO
CREATE TABLE Employees
(
	EmpID							INT IDENTITY(1, 1) PRIMARY KEY,

    Username                        VARCHAR(50) NULL,
    Password                        VARCHAR(50) NULL,

	Code							VARCHAR(100) UNIQUE NOT NULL,		-- Số hiệu cán bộ, công chức
	AvatarUrl						NVARCHAR(200) NULL,
	LastName						NVARCHAR(100) NULL,
	FirstName						NVARCHAR(100) NULL,
	NameOther						NVARCHAR(100) NULL,		-- Biệt Danh
	Gender							BIT NULL,				-- Giới tính
	Email							VARCHAR(50) NULL,		--
	Telephone						VARCHAR(50) NULL,
	DateOfBirth						DATETIME NULL,			-- Ngày sinh
	PlaceOfBirth					NVARCHAR(500) NULL,		-- Nơi sinh
	HomeTown						NVARCHAR(500) NULL,		-- Quê quán
	HouseHold						NVARCHAR(500) NULL,		-- Hộ khẩu, nơi đăng ký hộ khẩu thường chú
	CurrentAddress					NVARCHAR(500) NULL,		-- Nơi ở hiện nay

	JobCurrent						NVARCHAR(500) NULL,		-- Nghề nghiệp khi được tuyển dụng  mục 10
	DateOfRecruitment				DATETIME NULL,			-- Ngày tuyển dụng
	OrganOfRecruitment				NVARCHAR(500) NULL,		-- Cơ quan tuyển dụng ,mục 11
	TaskIsAssigned					NVARCHAR(500) NULL,		-- Công việc chính được giao mục 13

	PosID							INT NULL,				-- Chức vụ hiện tại
	CONSTRAINT FK_Postions_Employees_ID FOREIGN KEY (PosID) REFERENCES Postions(PosID),

					


	Ethnic							NVARCHAR(100) NULL,		-- Dân tộc
	Religion						NVARCHAR(100) NULL,		-- Tôn giáo
	StatusOfEmp						BIT NULL,

	DepManagerID					INT NULL,				-- Cơ quan quản lý
	CONSTRAINT FK_DepartmentsManager_Employees_ID FOREIGN KEY (DepManagerID) REFERENCES Departments(DepID),

	DepUsingID							INT NULL,			-- Cơ quan làm việc, sử dụng
	CONSTRAINT FK_DepartmentsUsing_Employees_ID FOREIGN KEY (DepUsingID) REFERENCES Departments(DepID)
)
GO


-- Profiles------------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Profiles') DROP TABLE Profiles
GO
CREATE TABLE Profilies
(
	ProID							INT IDENTITY(1, 1) PRIMARY KEY,
	EmpID							INT NOT NULL,
	CONSTRAINT FK_Profilies_Employees_ID FOREIGN KEY (EmpID) REFERENCES Employees(EmpID),

	CommunistPartyOfDate			DATETIME NULL,				-- Ngày vào đảng
	CommunistPartyOfFormally		DATETIME NULL,				-- Ngày vào đảng chính thức
	UnionsOfDate					DATETIME NULL,				-- Ngày vào đoàn
	JoinTheArmy						DATETIME NULL,				-- Ngày nhập ngũ
	Demobilized						DATETIME NULL,				-- Ngày xuất ngũ
	HighestOfRank					NVARCHAR(500) NULL,			-- Quân hàm cao nhất 
	HighestOfHonors					NVARCHAR(500) NULL,			-- Danh hiệu phong tặng cao nhất

	ForteOfWork						NVARCHAR(500) NULL,			-- Sở trường công việc, công tác
	Commendation					NVARCHAR(500) NULL,			-- Khen thưởng, năm
	Disciplined						NVARCHAR(500) NULL,			-- Kỹ luật
	StateOfHealth					NVARCHAR(100) NULL,			-- Tình trạng sức khỏe
	Height							FLOAT NULL,					-- Chiều cao
	[Weight]						FLOAT NULL,					-- Cân năng
	BloodOfGroup					NVARCHAR(50) NULL,			-- Nhosm mau
	WarInvalids						NVARCHAR(50) NULL,			-- Thương binh
	PolicyOfFamily					NVARCHAR(50) NULL,			-- Gia đình chính sách

	IdentityCards					NVARCHAR(50) NULL,			-- Số Chứng minh thư
	IdentityCardsOfDate				DATETIME NULL,				-- Ngày cấp chứng minh thư
	PlaceOfCard						NVARCHAR(50) NULL,			-- Nơi cấp
	NumberOfInsurance				NVARCHAR(50) NULL,			-- Số sổ bảo hiểm

	Descriptions					NTEXT NULL,					-- Mô tả, mục 29
	ReviewedAndEvaluation			NTEXT NULL					-- Nhận xét đánh giá, mục 32
)
GO



-- EducationsForEmps Trình độ học vấn (Từ mục 15.1 - 15.6) -----------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'EducationsForEmps') DROP TABLE EducationsForEmps
GO
CREATE TABLE EducationsForEmps
(	
	EduID							INT IDENTITY(1, 1) PRIMARY KEY,
	GeneralLevel					NVARCHAR(500) NULL,		-- Trình độ phổ thông

	QuaID							INT	NOT NULL,		-- Trình độ chuyên môn
	CONSTRAINT FK_Qualifications_EmployeesQualifications_ID FOREIGN KEY (QuaID) REFERENCES Qualifications(QuaID),

	PoliID							INT	NOT NULL,		-- Lý luận Chính trị
	CONSTRAINT FK_PoliID_EducationsForEmps_ID FOREIGN KEY (PoliID) REFERENCES PoliticalOfTheories(PoliID),

	StateID							INT NOT NULL,		-- Quản lí nhà nước
	CONSTRAINT FK_StateID_EducationsForEmps_ID FOREIGN KEY (StateID) REFERENCES StateOfManagements(StateID),

	LanguageID							INT NOT NULL,		-- Trình độ ngoại ngữ
	CONSTRAINT FK_Languages_EducationsForEmps_ID FOREIGN KEY (LanguageID) REFERENCES TypeOfLanguages(LanguageID),

	InforID							INT NOT NULL,		-- Trình độ tin học
	CONSTRAINT FK_EmployeesInfor_EducationsForEmps_ID FOREIGN KEY (InforID) REFERENCES TypeOfInformations(InforID),

	EmpID							INT NOT NULL,		-- Của nhân viên nào
	CONSTRAINT FK_Employees_EducationsForEmps_ID FOREIGN KEY (EmpID) REFERENCES Employees(EmpID),

	UpdateForDate					DATETIME NOT NULL,				-- Ngày cập nhật trình độ học vấn
	StatusOfEmpEdus					BIT NULL,						-- Trạng thái đang tồn tại hay k?
)
GO



-- TrainingFosterings  Đào tạo bồi dưỡng mục 27 -----------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'TrainingFosterings') DROP TABLE TrainingFosterings
GO
CREATE TABLE TrainingFosterings
(
	TraFosID							INT IDENTITY(1, 1) PRIMARY KEY,
	EmpID								INT NOT NULL,
	CONSTRAINT FK_Employees_TrainingFosterings_ID FOREIGN KEY (EmpID) REFERENCES Employees(EmpID),

	NameSchoolTrain						NVARCHAR(200) NULL,				-- Tên trường đào tạo bồi dưỡng
	Specialized							NVARCHAR(200) NULL,				-- Chuyên ngành

	StartOfDate							DATETIME NULL,					-- Ngày bắt đầu
	EndOfDate							DATETIME NULL,					-- Ngày kết thúc

	TrainID								INT NOT NULL,					-- Hình thức đào tạo
	CONSTRAINT FK_TypeOfTrainning_TrainingFosterings_ID FOREIGN KEY (TrainID) REFERENCES TypeOfTrainnings(TrainID),

	QuaID								INT	NOT NULL,		-- Trình độ chuyên môn, Chứng chỉ bằng cấp được dào tạo
	CONSTRAINT FK_TypeOfTrainning_EmployeesQualifications_ID FOREIGN KEY (QuaID) REFERENCES Qualifications(QuaID),

	StatusOfTrain						BIT NULL						-- Trạng thái done or undone
)
GO



-- FamilyRelationships  Mối quan hệ gia đình mục 30 -----------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'FamilyRelationships') DROP TABLE FamilyRelationships
GO
CREATE TABLE FamilyRelationships
(
	FaReID								INT IDENTITY(1, 1) PRIMARY KEY,
	EmpID								INT NOT NULL,
	CONSTRAINT FK_Employees_FamilyRelationships_ID FOREIGN KEY (EmpID) REFERENCES Employees(EmpID),

	TypeRelation						BIT NULL,						-- Loại quan hệ nội or ngoại

	NameOfRelations						NVARCHAR(200) NULL,				-- Tên mối quan hệ
	FullOfName							NVARCHAR(200) NULL,				-- Tên đầy đủ

	YearOfBirth							DATETIME NULL,					-- Năm sinh
	HomeTown							NVARCHAR(200) NULL,				-- Quê quán
	NamOfJob							NVARCHAR(200) NULL,				-- Nghề Nghiệp
	PostionsName						NVARCHAR(200) NULL,				-- Chức danh chức vụ
	PlaceOfWork							NVARCHAR(200) NULL,				-- Đơn vị công tác
	CurrentAddress						NVARCHAR(500) NULL,				-- Nơi ở hiện nay
	MemberOfOrganzations				NVARCHAR(500) NULL,				-- Tên tổ chức xã hội tham ra
	StatusOfMemberFamily				BIT NULL						-- Trạng thái done or undone
)
GO

















-- Delay
-- SalaryLevels Nghạch công chức --------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'SalaryLevels') DROP TABLE SalaryLevels
GO
CREATE TABLE SalaryLevels
(
	SaLevID									INT IDENTITY(1, 1) PRIMARY KEY,
	NameOfSalary							NVARCHAR(200) NULL,						-- Nghạch công chức,. viên chức
	Code									NVARCHAR(200) NULL,						-- Mã Ngạch
	LevelSalary								VARCHAR(100) NULL,						-- Bậc lương
	NumberSalary							VARCHAR(100) NULL,						-- Hệ số lương
	Descriptons								NTEXT NULL,
	StatusOfLevel							BIT NULL
)
GO



-- EmployeesSalaryLevels -----------------------------------------------------------------------------
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'EmployeesSalaryLevels') DROP TABLE EmployeesSalaryLevels
GO
CREATE TABLE EmployeesSalaryLevels
(
	EmpSalaryID						INT IDENTITY(1, 1) PRIMARY KEY,
	EmpID							INT NOT NULL,
	SaLevID							INT NOT NULL,
	CONSTRAINT FK_Employees_EmployeesSalaryLevels_ID FOREIGN KEY (EmpID) REFERENCES Employees(EmpID),
	CONSTRAINT FK_SalaryLevels_EmployeesSalaryLevels_ID FOREIGN KEY (SaLevID) REFERENCES SalaryLevels(SaLevID),

	CodeEmpChangeWork				VARCHAR(100) NULL,		-- Mã của công tác, mã thay đổi

	AllowancesPostion				FLOAT NULL,				-- Khoản phụ cấp chức vụ
	AllowancesOther					FLOAT NULL,				-- Các khoản phụ khác

	StartOfSalary					DATETIME NULL,			-- Ngày bắt đầu nhận lương mới, ngày hưởng
	EndOfWork						DATETIME NULL,			-- Ngày kết thúc
)
GO

USE ManagerEmployees
GO

INSERT INTO Administrators(Username, [Password], FullOfName, LastLogined, StatusOfAdmin) VALUES('admin', 'e10adc3949ba59abbe56e057f20f883e', N'A Đờ Min', GETDATE(), 1)
